/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package upc.jfactory.scp.bl.controller;

import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.servlet.http.HttpSession;
import upc.jfactory.scp.componente.WSAlumnoBC;
import upc.jfactory.scp.componente.WSEmpresaBC;
import upc.jfactory.scp.entidad.Alumno;
import upc.jfactory.scp.entidad.Empresa;
import upc.jfactory.scp.form.FormLogin;



/**
 *
 * @author Diego Tovar
 */
public class IniciarSesionController
{

    public IniciarSesionController()
    {

    }

   public String iniciarSesion(String usuario, String clave){

 FacesContext ctx = FacesContext.getCurrentInstance();


        HttpSession session =  (HttpSession) ctx.getExternalContext().getSession(true);
  String resultado = "error";

        try {



            Alumno alumno;
                char letra = Character.toUpperCase(usuario.toCharArray()[0]);
                  usuario = usuario.replace(usuario.toCharArray()[0],letra);
                if (usuario.toCharArray()[0]=='U' && ((alumno = verificarAlumnoUPC(usuario, clave)) !=null)) {

                   // Alumno alumno = verificarAlumnoSCP(usuario);null
                    if (alumno != null) {
                        //Aca no va esto alumno.setPreferenciasRol(alumnoDao.getPreferences(usuario));
                        session.setAttribute("usuario", alumno);
                    session.setAttribute("grupo", "a");
                        resultado="ok";

                      
                    }
                }
             else {
                Empresa empresa;
                if ((empresa = verificarEmpresa(usuario, clave)) != null) {

                session.setAttribute("usuario", empresa);
                    session.setAttribute("grupo", "e");
   resultado="ok";
         
            }
        }
      }     catch (Exception ex) {
            ex.printStackTrace();
            session =(HttpSession) ctx.getExternalContext().getSession(true);
            session.setAttribute("error", "Hubo un problema al intentar iniciar sesion. Por favor contacte con el administrador");
             Logger.getLogger(FormLogin.class.getName()).log(Level.SEVERE, null, ex);

        }
finally
        {
            return resultado;
        }


}
 public Alumno autentificaroUsuario(String usuario, String password)
    {
             Alumno alumno = new Alumno();
        alumno.setApellidoMaterno("espinoza");
        alumno.setApellidoPaterno("tovar");
        alumno.setNombreAlumno("Diego");
        alumno.setCodigoAlumno("u320171");
        alumno.setIdAlumno(1);
        return alumno;
       
    }
 public Empresa autentificaroEmpresa(String usuario, String password)
    {
             Empresa alumno = new Empresa();
        alumno.setCorreo("nose");
        alumno.setEmpresaId(2);
        alumno.setNombre("JaVa EMpresa");

        return alumno;

    }
private Alumno verificarAlumnoUPC(String usuario, String clave) throws Exception {
       Alumno alumno=null;
        //Autenticar al usuario
        try {
                 WSAlumnoBC wsalumno = new WSAlumnoBC();
                 alumno = wsalumno.GetAlumnoWS(usuario);

        if(alumno.getIdAlumno()!=0)
        {   Hashtable<String, String> env = new Hashtable(11);
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldap://adacadmo.upc.edu.pe:389/DC=upc,DC=edu,DC=pe"); //URL del proveedor LDAP
            //env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5"); //Tipo de autenticacion
            env.put(Context.SECURITY_AUTHENTICATION, "simple"); //Tipo de autenticacion
            //OU=Alumnos,OU=AlumnosMON,OU=Monterrico,OU=Usuarios,DC=upc,DC=edu,DC=pe
            //env.put(Context.SECURITY_PRINCIPAL, user);
            env.put(Context.SECURITY_PRINCIPAL, "CN=" + usuario + ",OU=Alumnos,OU=AlumnosMON,OU=Monterrico,OU=Usuarios,DC=upc,DC=edu,DC=pe"); //Tipo de autenticacion
            env.put(Context.SECURITY_CREDENTIALS, clave); //Contrase�?�?�?�??�?�?�â�?��?��?�?â�?�š�?�??�?±a

            DirContext ctx = new InitialDirContext(env);
            ctx.close();
        }else
            alumno = null;

        } catch (Exception ex) {
            throw new Exception("Hubo un problema al intentar iniciar sesion. Por favor contacte con el administrador");
          }
           return alumno;
    }

    private Empresa verificarEmpresa(String usuario, String clave) throws Exception {
        Empresa empresa = null;
        try {

           WSEmpresaBC WSempresa = new WSEmpresaBC();
             empresa = WSempresa.GetEmpresaWS(usuario, clave);

        } catch (Exception ex) {
            throw new Exception("Hubo un problema al intentar iniciar sesion. Por favor contacte con el administrador");
        }
        return empresa;
    }
}